﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Data;
using System.Data.SqlClient;
using Joel.Vishnu.AccesoDatos.Interfaces;

namespace Joel.Vishnu.AccesoDatos.SQL_Server
{
    public class ServicioDatosProducto : ServicioDatosBase, IServicioDatosProducto
    {
        #region Constructores
        
        public ServicioDatosProducto()
            : base()
        {
        }

        #endregion

        #region Metodos

        public DataSet Productos_DevolverTodos()
        {
            try
            {
                SqlCommand cm = new SqlCommand("Productos_DevolverTodos", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                SqlDataAdapter da = new SqlDataAdapter(cm);
                DataSet ds = new DataSet();
                da.Fill(ds);
                return ds;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        public DataSet Productos_DevolverPorId(Int32 productoId)
        {
            try
            {
                SqlCommand cm = new SqlCommand("Productos_DevolverPorId", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                cm.Parameters.Add(new SqlParameter("@productoId", productoId));
                SqlDataAdapter da = new SqlDataAdapter(cm);
                DataSet ds = new DataSet();
                da.Fill(ds);
                return ds;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        public Int32 Productos_Insertar(String nombre, String observacion, Decimal precioLista, Decimal precioDistribuidor,
            Int32 productoSubCategoriaId)
        {
            try
            {
                SqlCommand cm = new SqlCommand("Productos_Insertar", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                cm.Parameters.Add(new SqlParameter("@nombre", nombre));
                cm.Parameters.Add(new SqlParameter("@observacion", observacion));
                cm.Parameters.Add(new SqlParameter("@precioLista", precioLista));
                cm.Parameters.Add(new SqlParameter("@precioDistribuidor", precioDistribuidor));
                cm.Parameters.Add(new SqlParameter("@productoSubCategoriaID", productoSubCategoriaId));
                Conexion.Open();
                return Convert.ToInt32(cm.ExecuteScalar());
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        public void Productos_Modificar(Int32 productoId, String nombre, String observacion, Decimal precioLista,
            Decimal precioDistribuidor, Int32 productoSubCategoriaId)
        {
            try
            {
                SqlCommand cm = new SqlCommand("Productos_Modificar", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                cm.Parameters.Add(new SqlParameter("@productoId", productoId));
                cm.Parameters.Add(new SqlParameter("@nombre", nombre));
                cm.Parameters.Add(new SqlParameter("@observacion", observacion));
                cm.Parameters.Add(new SqlParameter("@precioLista", precioLista));
                cm.Parameters.Add(new SqlParameter("@precioDistribuidor", precioDistribuidor));
                cm.Parameters.Add(new SqlParameter("@productoSubCategoriaId", productoSubCategoriaId));
                Conexion.Open();
                cm.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        public void Productos_Eliminar(Int32 productoId)
        {
            try
            {
                SqlCommand cm = new SqlCommand("Productos_Eliminar", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                cm.Parameters.Add(new SqlParameter("@productoId", productoId));
                Conexion.Open();
                cm.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        #endregion
    }
}
